#include <iostream>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <cstring>
#include <sys/wait.h>
using namespace std;
#include <iostream>
#include <sys/wait.h>
#include <unistd.h>
#include <cstdlib>

using namespace std;


int main()
{
    cout<<"hello world"<<endl;
    return 0;
}
// int main()
// {
//     pid_t id = fork();

//     if (id == 0)
//     {
//         sleep(3);
//         int a = 100;
//         a /= 0; // 这将触发SIGSEGV信号
//         exit(0);
//     }

//     int status = 0;
//     pid_t rid = waitpid(id, &status, 0);

//     if (rid > 0)
//     {
//         if (WIFEXITED(status))
//         {
//             cout << "子进程正常退出，退出状态码: " << WEXITSTATUS(status) << endl;
//         }
//         else if (WIFSIGNALED(status))
//         {
//             cout << "子进程接收到信号退出，信号编号: " << WTERMSIG(status) << endl;
//             if (WCOREDUMP(status))
//             {
//                 cout << "生成了core dump文件" << endl;
//             }
//             else
//             {
//                 cout << "没有生成core dump文件" << endl;
//             }
//         }
//     }

//     return 0;
// }

// int main()
// {
//     pid_t id = fork();
//     if (id == 0)
//     {
//         sleep(2);
//         int a = 10;
//         a /= 0; // 故意异常，收到SIGFPE-> core
//         exit(0);
//     }

//     // father
//     // int status = 0;
//     // pid_t rid = waitpid(id, &status, 0);
//     // if (rid > 0)
//     // {
//     //     std::cout << "exit code: " << ((status >> 8) & 0xFF) << std::endl; // 没有意义
//     //     std::cout << "exit signal: " << (status & 0x7F) << std::endl;
//     //     std::cout << "core dump: " << ((status >> 7) & 0x1) << std::endl;
//     // }

//     // pid_t id = fork();
//     // if (id == 0)
//     // {
//     //     sleep(3);
//     //     int a = 100;
//     //     a /= 0;
//     //     exit(0);
//     // }

//     // int status = 0;
//     // pid_t rid = waitpid(id, &status, 0);
//     // if (rid > 0)
//     // {
//     //     cout << "exit code: " << ((status >> 8) & 0xFF) << endl;
//     //     cout << "exit signal: " << (status & 0x7F) << endl;
//     //     cout << "core dump: " << ((status >> 7) & 0x1) << endl;
//     // }
//     return 0;
// }

// void handler(int signo)
// {
//     cout<<"get a signo: "<<signo<<endl;
//     sleep(1);
// }

// int main()
// {
//     signal(SIGSEGV,handler);
//     int* p = nullptr;
//     *p = 100;
//     return 0;
// }

// void handler(int signo)
// {
//     cout << "get a signo: " << signo << endl;
//     sleep(1);
// }

// int main()
// {
//     signal(SIGFPE,handler);
//     int a = 0;
//     a /= 0;
//     return 0;
// }

// void handler(int signo)
// {
//     cout << "get a sig: " << signo << endl;
//     unsigned int n = alarm(5);//设置一个新闹钟
//     cout << "还剩多少时间: " << n << endl;
// }

// int main()
// {
//     signal(SIGALRM, handler);

//     alarm(300);//老闹钟

//     int cnt = 0;
//     while (true)
//     {
//         sleep(1);
//         cout << "cnt: " << cnt++ << ", pid is:" << getpid() << endl;
//     }
//     return 0;
// }

// int main(int argc, char *argv[])
// {
//     if (argc != 3)
//     {
//         cout << "Usage: " << argv[0] << " -signumber pid" << endl;
//         return 1;
//     }

//     int signumber = stoi(argv[1] + 1);
//     int pid = stoi(argv[2]);

//     int n = kill(pid, signumber);
//     if (n < 0)
//     {
//         cerr << "kill error" << strerror(errno) << endl;
//     }
//     return 0;
// }
